ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π»Π΅ΠΊΡ†ΠΈΠΈ

  • ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Π΅ характСристики Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса
  • Доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ
  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса
  • ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
  • НаслСдованиС классов
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ
  • ДинамичСская диспСтчСризация ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
  • АбстрактныС классы
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Π΅ характСристики класса

class NetworkDevice {
private:                    // Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹
    string macAddress;      // ПолС Π΄Π°Π½Π½Ρ‹Ρ…
    string ipAddress;       // ПолС Π΄Π°Π½Π½Ρ‹Ρ…
    bool isConnected;       // ПолС Π΄Π°Π½Π½Ρ‹Ρ…
    
protected:                  // Π—Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹
    int signalStrength;     // Доступны наслСдникам
    
public:                     // ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹
    // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹
    NetworkDevice();        // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    NetworkDevice(const string& mac);  // ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор
    
    // ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹
    void connect();         // ΠœΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    void disconnect();      // ΠœΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    bool checkStatus() const;  // ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа

class ServerConnection {
private:
    // Доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса
    string password;
    void encryptData(string& data);
    
protected:
    // Доступны Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈ наслСдникам
    string serverAddress;
    int port;
    void logConnection();
    
public:
    // Доступны ΠΈΠ· любого мСста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
    void connect(const string& addr, int p);
    void sendData(const string& data);
    void disconnect();
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ

class NetworkPacket {
private:
    int packetId;
    string data;
    time_t timestamp;
    
public:
    // ΠŸΡ€ΡΠΌΠΎΠΉ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ (Π½Π΅ рСкомСндуСтся)
    int getPacketId() { return packetId; }
    
    // ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ доступ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
    void setData(const string& newData) {
        if (newData.length() > 0 && newData.length() < 1500) {
            data = newData;
            timestamp = time(nullptr);
        }
    }
    
    string getData() const { return data; }
    
    // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ доступом
    bool isValid() const {
        return !data.empty() && packetId > 0;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…

class SecureConnection {
private:
    string encryptionKey;
    bool connectionEstablished;
    
    // ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
    string generateKey() {
        return "key_" + to_string(time(nullptr));
    }
    
    bool validateCertificate() {
        // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сСртификата
        return true;
    }
    
public:
    void establishConnection() {
        encryptionKey = generateKey();
        connectionEstablished = validateCertificate();
    }
    
    void sendSecureMessage(const string& message) {
        if (connectionEstablished) {
            string encrypted = encrypt(message, encryptionKey);
            // ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ сообщСния
        }
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ класса

class NetworkClient {
private:
    string serverIp;
    int port;
    bool autoReconnect;
    
public:
    // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    NetworkClient() : serverIp("127.0.0.1"), port(8080), autoReconnect(true) {}
    
    // ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор
    NetworkClient(const string& ip, int p) : serverIp(ip), port(p), autoReconnect(true) {}
    
    // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    NetworkClient(const string& ip, int p = 80, bool reconnect = false) 
        : serverIp(ip), port(p), autoReconnect(reconnect) {}
    
    // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ копирования
    NetworkClient(const NetworkClient& other) 
        : serverIp(other.serverIp), port(other.port), autoReconnect(other.autoReconnect) {}
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Бписки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

class ServerConfig {
private:
    const int maxConnections;
    const int bufferSize;
    string serverName;
    vector<string> allowedIPs;
    
public:
    // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
    ServerConfig(const string& name, int maxConn) 
        : maxConnections(maxConn), 
          bufferSize(4096),
          serverName(name),
          allowedIPs({"127.0.0.1", "192.168.1.1"}) {
        // Π’Π΅Π»ΠΎ конструктора
        cout << "Server " << serverName << " configured" << endl;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ДСструктор класса

class NetworkResource {
private:
    int* buffer;
    int socketDescriptor;
    bool resourcesAllocated;
    
public:
    NetworkResource(int size) {
        buffer = new int[size];
        socketDescriptor = socket(AF_INET, SOCK_STREAM, 0);
        resourcesAllocated = true;
        cout << "Resources allocated" << endl;
    }
    
    // ДСструктор
    ~NetworkResource() {
        if (resourcesAllocated) {
            delete[] buffer;           // ОсвобоТдСниС памяти
            close(socketDescriptor);   // Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ сокСта
            resourcesAllocated = false;
            cout << "Resources freed" << endl;
        }
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса

class NetworkService {
private:
    string serviceName;
    int port;
    
public:
    NetworkService(const string& name, int p) : serviceName(name), port(p) {}
    void start() { cout << "Service " << serviceName << " started on port " << port << endl; }
};

int main() {
    // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° стСкС
    NetworkService httpService("HTTP", 80);
    httpService.start();
    
    // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΡƒΡ‡Π΅
    NetworkService* ftpService = new NetworkService("FTP", 21);
    ftpService->start();
    
    // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
    NetworkService services[] = {
        NetworkService("SSH", 22),
        NetworkService("SMTP", 25),
        NetworkService("DNS", 53)
    };
    
    // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
    vector<NetworkService> serviceList = {
        NetworkService("HTTP", 80),
        NetworkService("HTTPS", 443)
    };
    
    delete ftpService; // ОсвобоТдСниС памяти
    return 0;
}
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

class ConnectionManager {
private:
    static int activeConnections;
    int connectionId;
    
public:
    ConnectionManager() {
        connectionId = ++activeConnections;
        cout << "Connection " << connectionId << " created" << endl;
    }
    
    ~ConnectionManager() {
        activeConnections--;
        cout << "Connection " << connectionId << " destroyed" << endl;
    }
    
    static int getActiveConnections() { return activeConnections; }
};

int ConnectionManager::activeConnections = 0;

void createTemporaryConnection() {
    ConnectionManager temp;  // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
    cout << "Active connections: " << ConnectionManager::getActiveConnections() << endl;
} // temp автоматичСски уничтоТаСтся здСсь
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

class DataProcessor {
public:
    // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠΎ количСству ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    void processData(const string& data) {
        cout << "Processing single data: " << data << endl;
    }
    
    void processData(const string& data1, const string& data2) {
        cout << "Processing pair: " << data1 << " and " << data2 << endl;
    }
    
    // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    void processData(int number) {
        cout << "Processing number: " << number << endl;
    }
    
    void processData(double value) {
        cout << "Processing double: " << value << endl;
    }
    
    // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ const
    void processData() { cout << "Non-const version" << endl; }
    void processData() const { cout << "Const version" << endl; }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

class NetworkAddress {
private:
    string ip;
    int port;
    
public:
    NetworkAddress(const string& ipAddr, int p) : ip(ipAddr), port(p) {}
    
    // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния
    bool operator==(const NetworkAddress& other) const {
        return ip == other.ip && port == other.port;
    }
    
    // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания
    NetworkAddress& operator=(const NetworkAddress& other) {
        if (this != &other) {
            ip = other.ip;
            port = other.port;
        }
        return *this;
    }
    
    // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π²ΠΎΠ΄Π°
    friend ostream& operator<<(ostream& os, const NetworkAddress& addr) {
        os << addr.ip << ":" << addr.port;
        return os;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

class NetworkProtocol {
public:
    virtual void sendData(const string& data) {
        cout << "Basic protocol sending: " << data << endl;
    }
    
    virtual string receiveData() {
        return "Basic data received";
    }
    
    virtual ~NetworkProtocol() = default;
};

class TCPProtocol : public NetworkProtocol {
public:
    void sendData(const string& data) override {
        cout << "TCP protocol establishing connection..." << endl;
        cout << "TCP sending reliable data: " << data << endl;
    }
    
    string receiveData() override {
        return "TCP received: reliable data stream";
    }
};

class UDPProtocol : public NetworkProtocol {
public:
    void sendData(const string& data) override {
        cout << "UDP protocol sending datagram: " << data << endl;
    }
    
    string receiveData() override {
        return "UDP received: datagram packet";
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

class Connection {
protected:
    string connectionType;
    
public:
    Connection() : connectionType("Basic") {}
    
    // Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄
    virtual void establish() {
        cout << "Establishing " << connectionType << " connection" << endl;
    }
    
    // Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄
    virtual void transmit(const string& data) = 0;
    
    virtual ~Connection() = default;
};

class SecureConnection : public Connection {
public:
    SecureConnection() { connectionType = "Secure"; }
    
    void establish() override {
        cout << "Establishing secure connection with encryption" << endl;
    }
    
    void transmit(const string& data) override {
        cout << "Transmitting encrypted data: " << data << endl;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

НаслСдованиС классов

class Device {
protected:
    string deviceId;
    string manufacturer;
    bool isActive;
    
public:
    Device(const string& id, const string& maker) 
        : deviceId(id), manufacturer(maker), isActive(false) {}
    
    void activate() { isActive = true; }
    void deactivate() { isActive = false; }
    bool getStatus() const { return isActive; }
};

class NetworkDevice : public Device {
protected:
    string ipAddress;
    string macAddress;
    
public:
    NetworkDevice(const string& id, const string& maker, const string& ip) 
        : Device(id, maker), ipAddress(ip) {}
    
    void setMacAddress(const string& mac) { macAddress = mac; }
    string getIpAddress() const { return ipAddress; }
};

class Router : public NetworkDevice {
private:
    int portCount;
    vector<string> routingTable;
    
public:
    Router(const string& id, const string& maker, const string& ip, int ports) 
        : NetworkDevice(id, maker, ip), portCount(ports) {}
    
    void addRoute(const string& destination) {
        routingTable.push_back(destination);
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π’ΠΈΠΏΡ‹ наслСдования

class BaseNetworkService {
public:
    void publicMethod() { cout << "Public method" << endl; }
protected:
    void protectedMethod() { cout << "Protected method" << endl; }
private:
    void privateMethod() { cout << "Private method" << endl; }
};

// ΠŸΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ΅ наслСдованиС
class PublicService : public BaseNetworkService {
    // publicMethod остаСтся public
    // protectedMethod остаСтся protected
    // privateMethod нСдоступСн
};

// Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ наслСдованиС
class ProtectedService : protected BaseNetworkService {
    // publicMethod становится protected
    // protectedMethod остаСтся protected
    // privateMethod нСдоступСн
};

// ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅ наслСдованиС
class PrivateService : private BaseNetworkService {
    // publicMethod становится private
    // protectedMethod становится private
    // privateMethod нСдоступСн
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

class ConnectionInterface {
public:
    virtual void connect() = 0;
    virtual void disconnect() = 0;
    virtual ~ConnectionInterface() = default;
};

class DataProcessor {
public:
    virtual void processData(const string& data) = 0;
    virtual ~DataProcessor() = default;
};

class EncryptionProvider {
public:
    virtual string encrypt(const string& data) = 0;
    virtual string decrypt(const string& data) = 0;
    virtual ~EncryptionProvider() = default;
};

// Класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ нСсколько интСрфСйсов
class SecureNetworkConnection : public ConnectionInterface, 
                               public DataProcessor, 
                               public EncryptionProvider {
private:
    bool isConnected;
    
public:
    void connect() override { isConnected = true; }
    void disconnect() override { isConnected = false; }
    void processData(const string& data) override {
        if (isConnected) {
            string encrypted = encrypt(data);
            cout << "Processing encrypted: " << encrypted << endl;
        }
    }
    string encrypt(const string& data) override {
        return "encrypted_" + data;
    }
    string decrypt(const string& data) override {
        return data.substr(10); // Π£Π±ΠΈΡ€Π°Π΅ΠΌ "encrypted_"
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ наслСдования

class NetworkComponent {
protected:
    string componentId;
    
public:
    NetworkComponent(const string& id) : componentId(id) {}
    virtual void initialize() = 0;
};

// Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС
class Sender : virtual public NetworkComponent {
public:
    Sender(const string& id) : NetworkComponent(id) {}
    virtual void send(const string& data) = 0;
};

// Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС
class Receiver : virtual public NetworkComponent {
public:
    Receiver(const string& id) : NetworkComponent(id) {}
    virtual string receive() = 0;
};

// ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ благодаря Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ наслСдованию
class Transceiver : public Sender, public Receiver {
public:
    Transceiver(const string& id) : NetworkComponent(id), Sender(id), Receiver(id) {}
    
    void initialize() override {
        cout << "Transceiver " << componentId << " initialized" << endl;
    }
    
    void send(const string& data) override {
        cout << "Sending: " << data << endl;
    }
    
    string receive() override {
        return "Received data";
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

class BaseServer {
public:
    void start() { cout << "Base server started" << endl; }
    void stop() { cout << "Base server stopped" << endl; }
    
    // Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для пСрСопрСдСлСния
    virtual void handleRequest(const string& request) {
        cout << "Base handling: " << request << endl;
    }
};

class WebServer : public BaseServer {
public:
    // Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ (hiding) ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start() Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса
    void start() { 
        cout << "Web server started on port 80" << endl; 
    }
    
    // ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
    void handleRequest(const string& request) override {
        cout << "Web server processing HTTP request: " << request << endl;
    }
    
    // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
    void configureVirtualHosts() {
        cout << "Virtual hosts configured" << endl;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ДинамичСская диспСтчСризация

class NetworkHandler {
public:
    virtual void processPacket(const string& packet) {
        cout << "Basic packet processing" << endl;
    }
    
    virtual ~NetworkHandler() = default;
};

class TCPHandler : public NetworkHandler {
public:
    void processPacket(const string& packet) override {
        cout << "TCP packet processing: reliable delivery" << endl;
    }
};

class UDPHandler : public NetworkHandler {
public:
    void processPacket(const string& packet) override {
        cout << "UDP packet processing: best effort delivery" << endl;
    }
};

// Ѐункция, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ
void handleNetworkTraffic(NetworkHandler* handler, const string& packet) {
    // ДинамичСская диспСтчСризация - Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎ врСмя выполнСния
    handler->processPacket(packet);
}

int main() {
    NetworkHandler* handlers[] = {
        new TCPHandler(),
        new UDPHandler(),
        new NetworkHandler()
    };
    
    for (auto handler : handlers) {
        handleNetworkTraffic(handler, "test packet");
        delete handler;
    }
    
    return 0;
}
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

АбстрактныС классы

class Protocol {
protected:
    string protocolName;
    int defaultPort;
    
public:
    Protocol(const string& name, int port) : protocolName(name), defaultPort(port) {}
    
    // Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
    virtual void establishConnection(const string& address, int port) = 0;
    virtual void sendData(const string& data) = 0;
    virtual string receiveData() = 0;
    virtual void closeConnection() = 0;
    
    // Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ дСструктор
    virtual ~Protocol() = default;
    
    // ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄
    string getProtocolName() const { return protocolName; }
};

// ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ рСализация
class HTTPProtocol : public Protocol {
public:
    HTTPProtocol() : Protocol("HTTP", 80) {}
    
    void establishConnection(const string& address, int port) override {
        cout << "Establishing HTTP connection to " << address << ":" << port << endl;
    }
    
    void sendData(const string& data) override {
        cout << "Sending HTTP request: " << data << endl;
    }
    
    string receiveData() override {
        return "HTTP/1.1 200 OK\nContent-Type: text/html\n\n<html>...</html>";
    }
    
    void closeConnection() override {
        cout << "Closing HTTP connection" << endl;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² C++

// Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ
class IEncryption {
public:
    virtual string encrypt(const string& plaintext) = 0;
    virtual string decrypt(const string& ciphertext) = 0;
    virtual ~IEncryption() = default;
};

// Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
class IAuthentication {
public:
    virtual bool authenticate(const string& username, const string& password) = 0;
    virtual void logout() = 0;
    virtual ~IAuthentication() = default;
};

// Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ для логирования
class ILogger {
public:
    virtual void log(const string& message) = 0;
    virtual void setLogLevel(int level) = 0;
    virtual ~ILogger() = default;
};

// Класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ нСсколько интСрфСйсов
class SecureNetworkService : public IEncryption, public IAuthentication, public ILogger {
private:
    int logLevel;
    
public:
    string encrypt(const string& plaintext) override {
        return "encrypted_" + plaintext;
    }
    
    string decrypt(const string& ciphertext) override {
        return ciphertext.substr(10); // Π£Π±ΠΈΡ€Π°Π΅ΠΌ "encrypted_"
    }
    
    bool authenticate(const string& username, const string& password) override {
        return username == "admin" && password == "secret";
    }
    
    void logout() override {
        log("User logged out");
    }
    
    void log(const string& message) override {
        if (logLevel > 0) {
            cout << "[LOG] " << message << endl;
        }
    }
    
    void setLogLevel(int level) override {
        logLevel = level;
    }
};
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ классы

template <typename T>
class NetworkBuffer {
private:
    vector<T> buffer;
    size_t maxSize;
    
public:
    NetworkBuffer(size_t size) : maxSize(size) {}
    
    bool add(const T& item) {
        if (buffer.size() < maxSize) {
            buffer.push_back(item);
            return true;
        }
        return false;
    }
    
    T get() {
        if (!buffer.empty()) {
            T item = buffer.front();
            buffer.erase(buffer.begin());
            return item;
        }
        return T(); // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    }
    
    size_t size() const { return buffer.size(); }
    bool empty() const { return buffer.empty(); }
};

// ИспользованиС шаблонного класса
int main() {
    NetworkBuffer<string> stringBuffer(10);
    stringBuffer.add("Hello");
    stringBuffer.add("World");
    
    NetworkBuffer<int> intBuffer(5);
    intBuffer.add(42);
    intBuffer.add(100);
    
    return 0;
}
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ:

  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ - сокрытиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • НаслСдованиС - ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° ΠΈ созданиС ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ - Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ
  • Абстракция - Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΡ… характСристик
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ спСцификаторы доступа для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  2. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ наслСдованию, ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ повСдСния
  4. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ абстрактныС классы для опрСдСлСния интСрфСйсов
  5. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ наслСдовании ΠΏΡ€ΠΈ мноТСствСнном наслСдовании
  6. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ управляйтС Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Вопросы для самопровСрки

  1. Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ спСцификаторы доступа private, protected ΠΈ public?
  2. КакиС Ρ‚ΠΈΠΏΡ‹ конструкторов ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² C++?
  3. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹?
  4. Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²?
  5. Как Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ наслСдования?
  6. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ абстрактныС классы?
  7. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСствСнноС наслСдованиС?
  8. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ динамичСская диспСтчСризация ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²?
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ элСмСнты класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ организация наслСдования